###问题:
点击上层 ScrollView 需要将点击事件传递到下层,进行点击事件处理。但由于 Scrollview 容器的拦截原因,并不能简单指定 clickable 属性。

解决:

在 ScrollView 这一层,添加一个透明的 View,并把该 View 的 onTouch 事件传递给底层 View 作事件分发。

1
2
3
4
5
6
7
upView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
downView.dispatchTouchEvent(motionEvent);//传递到下层
return true;//返回 true
}
});

如果遇到在 Fragment 中布局,这是由于 Fragment 默认是没有 onTouchListener 事件,可能导致这一层 View 的 setOnTouchListener 没有生效,可以先获取该 View 的点击事件,在用点击事件中的 View 设置 setOnTouchListener 继而再进行下层事件分发。(既在上面代码中外层套一层点击事件)

参考

stackoverflow.com/questions/